namespace Umdf.ComInterop
{
    using System;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;

    [ComImport, InterfaceType((short) 1), Guid("74CC381C-0871-43C1-878B-3F7C9D16933D"), TypeLibType((short) 0x200)]
    public interface IWDFDeviceInitialize
    {
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void SetFilter();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void SetLockingConstraint([In] _WDF_CALLBACK_CONSTRAINT LockType);
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void RetrieveDevicePropertyStore([In] ref ushort pcwszServiceName, [In] _WDF_PROPERTY_STORE_RETRIEVE_FLAGS Flags, [MarshalAs(UnmanagedType.Interface)] out IWDFNamedPropertyStore ppPropStore, out _WDF_PROPERTY_STORE_DISPOSITION pDisposition);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void SetPowerPolicyOwnership([In] int fTrue);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void AutoForwardCreateCleanupClose([In] _WDF_TRI_STATE State);
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void RetrieveDeviceInstanceId([Out, MarshalAs(UnmanagedType.LPWStr)] string Buffer, [In, Out] ref uint pdwSizeInChars);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void SetPnpCapability([In] _WDF_PNP_CAPABILITY Capability, [In] _WDF_TRI_STATE Value);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        _WDF_TRI_STATE GetPnpCapability([In] _WDF_PNP_CAPABILITY Capability);
    }
}

